ICLR 2017
Smoothing
對NLP來說,很容易發生test dataset的字並沒有出現在training dataset,所計算 $c(word)$ 會等於零。
這不代表那些字就不重要,所以要用Smoothing的方法調整機率。
If data sparsity isn’t a problem for you, your model is too simple!
Add-one smoothing
應該是最早的方式
$V= {w:c(w)>0 } \cup {unknown }$
可是這個方法效果並不好,如下圖
Additive smoothing
前一個方法,把1替換成了 $\delta$
Good-Turing estimation
$r^{}=\left ( r+1 \right )\frac{ n_{r+1} }{ n_{r} }$
$n_{r}$是在n-grams出現r次的個數
所以經過調整之後,機率會變成 $p_{GT}\left ( x:c\left ( x \right )=r \right )=\frac{ r^{} }{N}$
使得$c(w)=0$的時候機率不會為零,並且總和不變
$N=\sum_{r=0}^{\infty }r^{*}n_{r}=\sum_{r=1}^{\infty }rn_{r}$
問題:如果$n_{r+1}=0$?
調整: $r^{*}=\left ( r+1 \right )\frac{E\left [ n_{r+1} \right ]}{E\left [ n_{r} \right ]}$
改用期望值代替
Interpolation
就是插值法!!
比起前面的方式更進一步考慮實際情況,例如說,同樣是烤肉跟燉肉都沒有出現在training dataset當中,但是明顯烤會比燉常見,所以烤肉的機率應該比燉高。
$p_{interp}(w_{i}|w_{i−1}) = \lambda p_{ML}\left(w_{i}|w_{i−1}\right) + (1 − \lambda)p_{ML}(w_{i})$
Absolute discounting
$p_{abs}(w_{i}|w_{i-1}) = \frac{c(w_{i-1},w_{i})-d}{c(w_{i-1})}+\lambda (w_{i-1})p(w_{i})$
Kneser-Ney
舉例:”San Francisco” and “Francisco”,如果依照前一個的方法,任何字接Francisco機率都會變大,但是就比較常跟San一起出現。
因此他轉換計算unigram的方式
$p_{count}=\frac{N(\bullet w_{i})}{\sum { {w}’ }N(\bullet {w}’)}$
$p{KN}(w_{i}|w_{i-1}) = \frac{c(w_{i-1},w_{i})-d}{c(w_{i-1})}+\beta (w_{i-1})p_{count}(w_{i})$
Apply on RNN model
可是,RNN模型沒辦法計算count,所以他想到兩個方法可以有smoothing的效果
- unigram noising
隨機$\gamma$的機率取代字,取代的字會從unigram frequency distribution抽樣 - blank noising
隨機$\gamma$的機率取代字,用底線做取代”_”
unigram noising as interpolation
插值法公式
noised
blank noising as interpolation
noised
其他改進
- 彈性的$\gamma$
考慮兩種bigrams,”and the”和”Humpty Dumpty”
第一種就是很常見的詞組,不希望他被noising影響而降低了機率,第二種就是A出現B通常也會一起出現的類型,考慮bigram的訊息量比unigram豐富,因此不希望被back off。
$\gamma_{AD}(x_{1})=\gamma_{0}\frac{N_{1+}(x_{1},\bullet )}{\sum { x{2} } c(x_{1},x_{2})}$ - 改用其他的機率分布
$q(x)\propto N_{1+}(\bullet ,x)$